package com.situ.mall.service.impl;

import java.math.BigDecimal;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.situ.mall.mapper.CartMapper;
import com.situ.mall.mapper.OrderItemMapper;
import com.situ.mall.mapper.OrderMapper;
import com.situ.mall.pojo.entity.Cart;
import com.situ.mall.pojo.entity.Order;
import com.situ.mall.pojo.entity.OrderItem;
import com.situ.mall.pojo.vo.CartProductVO;
import com.situ.mall.service.IOrderService;
import com.situ.mall.util.DateUtil;

@Service
public class OrderServiceImpl implements IOrderService{
	@Autowired
	private OrderMapper orderMapper;
	@Autowired
	private CartMapper cartMapper;
	@Autowired
	private OrderItemMapper orderItemMapper;

	@Override
	public boolean insert(Order order) {
		//这个order对象已经有userId,shippingId,paymentType
		// orderNo:使用当前的日期和时间 20200402093523
		order.setOrderNo(DateUtil.getCurrentTime());
		//statusint(10)订单状态:0-已取消-10-未付款，20-已付款，40-已发货，50-交易成功，60-交易关闭
		order.setStatus(10);
		
		BigDecimal totalPrice = BigDecimal.valueOf(0.0);
		// 现在还差payment：decimal(20,2) 这个订单的金额，保留2位小数
		// 查询cart表里面属于这个用户的checked=1状态所有订单
		List<CartProductVO> list = cartMapper.selectByUserIdAndChecked(order.getUserId());
		for (CartProductVO cartProductVO : list) {
			// 每次遍历把购物车里面的每一条，封装到OrderItem这个对象
			OrderItem orderItem = new OrderItem();
			orderItem.setOrderNo(order.getOrderNo());
			orderItem.setUserId(order.getUserId());
			orderItem.setProductId(cartProductVO.getProductId());
			// 自己完成关联查询把cart里面商品信息关联查询出来，设置到orderItem对象
			orderItem.setCurrentUnitPrice(cartProductVO.getProductPrice());
			orderItem.setProductImage(cartProductVO.getProductImage());
			orderItem.setProductName(cartProductVO.getProductName());
			orderItem.setQuantity(cartProductVO.getCartQuantity());
			
			orderItemMapper.insert(orderItem);
			
			// 计算这个OrderItem的总价格
			BigDecimal quantity = BigDecimal.valueOf(cartProductVO.getCartQuantity());
			BigDecimal orderItemTotalPrice = quantity.multiply(cartProductVO.getProductPrice());
			// 把OrderItem的总价格加到Orderd 的总价里面
			totalPrice = totalPrice.add(orderItemTotalPrice);
		}
		
		order.setPayment(totalPrice);
		orderMapper.insert(order);
		return true;
	}
	
	public static void main(String[] args) {
		System.out.println(0.1 + 0.2);
	}

}
